//package com.gosling.cloudspace.aop;
//
//import com.gosling.cloudspace.common.exception.PrometheusException;
//import com.gosling.cloudspace.common.annotation.Prometheus;
//import com.gosling.cloudspace.prometheus.PrometheusHandler;
//import lombok.extern.slf4j.Slf4j;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.Around;
//import org.aspectj.lang.annotation.Aspect;
//import org.aspectj.lang.annotation.Pointcut;
//import org.aspectj.lang.reflect.MethodSignature;
//
//import javax.annotation.Resource;
//import java.rmi.ServerException;
//
///**
// * 异常链路追踪
// *
// * @author lihonglin
// * @date 2024/2/26 10:11
// */
//@Aspect
//@Slf4j
//public class GlobalExceptionAspect {
//
//    @Resource
//    private PrometheusHandler prometheusHandler;
//
//    @Pointcut("@annotation(org.springframework.web.bind.annotation.RequestMapping)")
//    public void getRequestMapping() {
//    }
//
//    @Pointcut("@annotation(org.springframework.web.bind.annotation.GetMapping)")
//    public void getGetMapping() {
//    }
//
//    @Pointcut("@annotation(org.springframework.web.bind.annotation.PostMapping)")
//    public void getPostMapping() {
//    }
//
//
//    /**
//     * 系统异常、业务监控异常
//     *
//     * @param point
//     * @return
//     */
//    @Around("getRequestMapping() || getGetMapping() || getPostMapping()")
//    public Object insertExp(ProceedingJoinPoint point) throws Throwable {
//        //开始时间用于计算接口耗时
//        long startTime = System.currentTimeMillis();
//        Object r = null;
//        try {
//            r = point.proceed(point.getArgs());
//        } catch (PrometheusException e) {
//            //指定异常
//            prometheusHandler.handlePrometheusExp(point, startTime, e);
//            throw e;
//        } catch (ServerException e) {
//            //是否存在监听注解
//            if (((MethodSignature) point.getSignature()).getMethod().isAnnotationPresent(Prometheus.class)) {
//                prometheusHandler.handlePrometheusOtherExp(point, startTime, e);
//            }
//            //跳过未指定的异常
//            throw e;
//        } catch (Exception e) {
//            //系统异常
//            prometheusHandler.handleDefault(point, startTime, e);
//            throw e;
//        }
//        return r;
//    }
//
//}
